package com.jiazhong.basic.pack0315.demo;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

// Collection--->Set--->HashSet
public class DemoB {
    // 1. 如何产生对象
    private static void a() {
        // 空集合
        Set<String> set1 = new HashSet<>();
        Set<Integer> set2 = new HashSet<>();
        // 复制集合
        Set<String> set3 = new HashSet<>(set1);
        System.out.println(set1);
        System.out.println(set2);
        System.out.println(set3);
    }

    // 2. 如何对集合进行CRUD(存放、获取、修改、删除)
    private static void b() {
        // 没有 获取、修改、插入
        Set<String> set = new HashSet<>();
        set.add("aa");
        set.add("ff");
        set.add("mm");
        set.add("dd");
        set.add("bb");
        set.add("ee");
        set.add("cc");
        set.add("cc");
        set.add("kk");
        set.add("zz");
        System.out.println(set);
        set.remove("kk");
        set.remove("oo");
        System.out.println(set);
        set.clear();
        System.out.println(set);
    }

    // 3. 其他方法
    private static void c() {
        Set<String> set = new HashSet<>();
        set.add("aa");
        set.add("ff");
        set.add("mm");
        set.add("dd");
        set.add("bb");
        set.add("ee");
        set.add("cc");
        set.add("cc");
        set.add("kk");
        set.add("zz");
        int size = set.size();
        System.out.println(size);
        boolean empty = set.isEmpty();
        System.out.println(empty);
        Object[] array = set.toArray();
        System.out.println(Arrays.toString(array));
    }

    // 4. 循环集合
    private static void d() {
        Set<String> set = new HashSet<>();
        set.add("aa");
        set.add("ff");
        set.add("mm");
        set.add("dd");
        set.add("bb");
        set.add("ee");
        set.add("cc");
        set.add("cc");
        set.add("kk");
        set.add("zz");
        for (String e : set) {
            System.out.print(e + "\t");
        }
        System.out.println();
        Iterator<String> iterator = set.iterator();
        while (iterator.hasNext()) {
            String e = iterator.next();
            System.out.print(e + "\t");
        }
        System.out.println();
        set.forEach(e -> System.out.print(e + "\t"));
    }

    // 5. 如何如何查找
    private static void e() {
        Set<String> set = new HashSet<>();
        set.add("aa");
        set.add("ff");
        set.add("mm");
        set.add("dd");
        set.add("bb");
        set.add("ee");
        set.add("cc");
        set.add("cc");
        set.add("kk");
        set.add("zz");
        boolean b1 = set.contains("mm");
        boolean b2 = set.contains("uu");
        System.out.println(b1);
        System.out.println(b2);
    }

    // 6. 复杂类型查找
    private static void f(){
        Set<Person> set = new HashSet<>();
        Person p1 = new Person(1,"张三");
        Person p2 = new Person(2,"张三1");
        Person p3 = new Person(3,"张三2");
        Person p4 = new Person(4,"张三3");
        Person p5 = new Person(1,"张三");
        set.add(p1);
        set.add(p2);
        set.add(p3);
        set.add(p4);
        /*
            1. 重写equals方法
            2. 重写hashCode方法
         */
        boolean b = set.contains(p5);
        System.out.println(b);
        System.out.println("-----------");
        System.out.println(p1==p5);
        System.out.println(p1.equals(p5));
        System.out.println(p1.hashCode());
        System.out.println(p5.hashCode());
        System.out.println(p1.hashCode()==p5.hashCode());
    }
    public static void main(String[] args) {
        f();
    }
}
